// 提供与 英雄操作相关的接口
const express = require('express')
const router = express.Router()
const conn = require('../util/sql.js')

const multer = require('multer')
// const upload = multer({dest: 'uploads'})
// 精细化去设置，如何去保存文件
const storage = multer.diskStorage({
  // 保存在哪里
  destination: function (req, file, cb) {
    cb(null, 'uploads');
  },
  // 保存时，文件名叫什么
  filename: function (req, file, cb) {
    // console.log('file', file)
    // 目标： 新名字是时间戳+后缀名
    const filenameArr = file.originalname.split('.');
    // filenameArr.length-1是找到最后一个元素的下标
    const fileName = Date.now() + "." + filenameArr[filenameArr.length-1]
    cb(null, fileName) //
  }
})

const upload = multer({storage })
// 写接口
router.use(express.urlencoded())
router.get('/getHeroList', (req, res) => {
  // 1. 获取用户传递的参数。 
  //   如何获取get方式在请求行中传递的数据？ req.query中
  console.log('用户传递的参数', req.query)
  const { heroName } = req.query
  // 2. 拼接sql语句
  let sqlStr = `select id, name, gender, img from heros where isdelete=0`
  if(heroName) {
    //sqlStr = `select id, name, gender, img from heros where isdelete=0 and name="${heroName}"`
      sqlStr += ` and name="${heroName}"`
  } 
  console.log('sql:',sqlStr)
  // 3. 去数据库做查询
  conn.query(sqlStr, (err, result)=>{
    // 4. 根据查询结果，返回不同的数据
    console.log(err)
    if (err) {
      res.json({code: 500, msg: '查询出错，请与后端联系, tel: xxxxxx'})
      return
    }
    res.json({code: 200, msg: '请求成功', data: result})
    // console.log('查询结果', result)
  })
})

router.post('/addHero', (req, res) => {
  // 1. 获取参数。 如何获取post传递的 普通键值对？
  console.log('接收到的参数', req.body)
  const { name, gender } = req.body
  // 2. 拼接sql. 添加到heros表中
  const sqlStr = `insert into heros (name, gender) values("${name}", "${gender}")`
  console.log("sqlStr", sqlStr)
  // 3. 操作数据库
  conn.query(sqlStr, (err, result)=>{
    // 4. 根据操作结果，做不同的响应式
    // console.log(err)
    // console.log(result)
    if(err){
      res.json({"code":500,"msg":"服务器处理失败"})
      return
    }
    res.json({"code":200,"msg":"添加成功"})

  })
})

// 如何去接收一个文件？
router.post('/uploadFile', upload.single('file_data'), (req,res) => {
  // 如果文件上传成功
  console.log('本次上传的文件是', req.file)
  // 后面再做：错误处理
  res.json({
    "code":200, 
    "msg":"上传成功", 
    "src": "http://127.0.0.1:3000/uploads/" + req.file.filename})
})

// 修改英雄
router.post('/updateHero', (req, res) => {
  // 1. 获取参数
  console.log('获取参数', req.body);
  const {id, name, gender, img} = req.body
  let condition = []
  if(name) {
    condition.push(`name="${name}"`)
  }
  if(gender) {
    condition.push(`gender="${gender}"`)
  }
  if(img) {
    condition.push(`img="${img}"`)
  }
  const conditionStr = condition.join()

  // 2. 拼接sql字符串
  // const sqlStr=`update heros set name="${name}", gender="${gender}",img="${img}" where id=${id}`
  const sqlStr=`update heros set ${conditionStr} where id=${id}`
  console.log(sqlStr)
  // 3. 执行sql操作数据库
  conn.query(sqlStr, (err, result)=>{
    // console.log(err)
    // console.log(result)
    if(err) {
      res.json({code: 500, msg: '修改错误'})
      return
    }
    res.json({code: 200, msg: '修改成功'})
  })
  // 4. 根据操作结果，做不同的响应
})

module.exports = router
